﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.SessionState;
using System.Web.UI.WebControls;
using SIPDTO;


namespace SIP
{
    public partial class Parroquias : System.Web.UI.Page
    {
        #region ** Declaración de variables

        private string _valparametro = "Parametro Parroquia";
        SIPBLL.SIPBLL _bll = new SIPBLL.SIPBLL();
        List<dtoCanton> _dtcanton = new List<dtoCanton>();
        List<dtoDiocesis> _dtdiocesis = new List<dtoDiocesis>();
        List<dtoProvincias> _dtprovincia = new List<dtoProvincias>();
        List<dtoParametros> _dtparametro = new List<dtoParametros>();
        List<dtoParroquia> _dtparroquia = new List<dtoParroquia>();
        dtoProvincias _dtoprovincia = new dtoProvincias();
        dtoParroquia _dtoparroquia = new dtoParroquia();
        dtoCanton _dtocanton = new dtoCanton();
        dtoError _resp = new dtoError();
        dtoParametros _dtoparametro = new dtoParametros();

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                ObtenerProvincia();
                ObtenerDiocesis();
                ddlCanton.Items.Insert(0, new ListItem("Seleccionar Cantón", "0"));
                if (Convert.ToBoolean(Session["Crear"]) == true)
                {
                    CleanControl(this.Controls);
                    lblcodigo.Text = Convert.ToString(ObtenerParametro());
                }
                else
                {
                    BuscarParroquia();
                }
            }

        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
        ObtenerCanton();
        }

        protected void Registrar(object sender, EventArgs e)
        {
            try
            {
                if (Page.IsValid == true)
                {
                    if (Convert.ToBoolean(Session["Crear"]) == true)
                    {
                        ddlCanton.Enabled = true;
                        ddlDiocesis.Enabled = true;
                        ddlProvincia.Enabled = true;
                        if ((Convert.ToInt16((ddlCanton).SelectedValue) != 0) || (Convert.ToInt16((ddlDiocesis).SelectedValue) != 0) || (Convert.ToInt16((ddlProvincia).SelectedValue) != 0))
                        {
                            _dtoparroquia.IdParroquia = ObtenerParametro();
                            _dtoparroquia.Descripcion = this.txtNombre.Text;
                            _dtoparroquia.IdDiocesis = Convert.ToInt16(ddlDiocesis.SelectedValue);
                            _dtoparroquia.IdProvincia = Convert.ToInt16(ddlProvincia.SelectedValue);
                            _dtoparroquia.IdCanton = Convert.ToInt16(ddlCanton.SelectedValue);
                            _dtoparroquia.Telefono = txtTelefono.Text;
                            _dtoparroquia.Fax = txtFax.Text;
                            _dtoparroquia.Apartado = txtApartado.Text;
                            _dtoparroquia.Email = this.txtEmail.Text;
                            _dtoparroquia.Direccion = txtDireccion.Text;
                            if (chkactivo.Checked == true)
                            {
                                _dtoparroquia.Estado = true;
                            }
                            else
                            {
                                _dtoparroquia.Estado = false;
                            }
                            // se crea la parroquia en la tabla Parroquia
                            _resp = _bll.AceptarParroquia(_dtoparroquia,1);

                            if (_resp.IdError == 100)
                            {
                                WebMsgBox.Show(_resp.Mensaje);
                                CleanControl(this.Controls);
                                ActualizaParametro();// Se actualiza el parametro del consecutivo de la parroquia
                            }
                            else
                            {
                                WebMsgBox.Show(_resp.Mensaje);
                            }
                        }
                        else { WebMsgBox.Show("Exiten campos pendientes de completar, por favor verifique Diócesis, Provincia y Cantón"); }
                    }

                    else // actualiza la información de la parroquia
                    {
                        _dtoparroquia.IdParroquia = Convert.ToInt16(Session["idParroquia"]);
                        _dtoparroquia.Direccion = txtDireccion.Text;
                        _dtoparroquia.Telefono = txtTelefono.Text;
                        _dtoparroquia.Fax = txtFax.Text;
                        _dtoparroquia.Apartado = txtApartado.Text;
                        _dtoparroquia.Email = this.txtEmail.Text;
                        _dtoparroquia.Descripcion = txtNombre.Text;
                        if (chkactivo.Checked == true)
                        {
                            _dtoparroquia.Estado = true;
                        }
                        else
                        {
                            _dtoparroquia.Estado = false;
                        }
                        // se modifica la parroquia en la tabla Parroquia
                        _resp = _bll.AceptarParroquia(_dtoparroquia,2);

                        if (_resp.IdError == 100)
                        {
                            WebMsgBox.Show(_resp.Mensaje);
                            Response.Redirect("ListadoParroquia.aspx");
                        }
                        else
                        {
                            WebMsgBox.Show(_resp.Mensaje);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                WebMsgBox.Show(_resp.Mensaje);
            }

        }

        protected void Cancelar(object sender, EventArgs e)
        {
            Response.Redirect("ListadoParroquia.aspx"); // Retorna al listado de parroquias

        }
       
        private void BuscarParroquia() //Obtiene la información de la parroquia y la carga en pantalla
        {
            int id = Convert.ToInt16(Session["idparroquia"]);
            _dtparroquia = _bll.ObtenerParroquia(id);
            lblcodigo.Text  = Convert.ToString(id);
            txtApartado.Text = _dtparroquia[0].Apartado;
            txtDireccion.Text = _dtparroquia[0].Direccion;
            txtEmail.Text = _dtparroquia[0].Email;
            txtFax.Text = _dtparroquia[0].Fax;
            txtNombre.Text  = _dtparroquia[0].Descripcion;
            txtTelefono.Text = _dtparroquia[0].Telefono;
            ddlProvincia.SelectedValue = Convert.ToString(_dtparroquia[0].IdProvincia);
            ddlProvincia.Enabled = false;
            ObtenerCanton();
            ddlCanton.SelectedValue = Convert.ToString (_dtparroquia[0].IdCanton);
            ddlCanton.Enabled = false;
            ddlDiocesis.SelectedValue = Convert.ToString(_dtparroquia[0].IdDiocesis);
            ddlDiocesis.Enabled = false;
           
            if (Convert.ToBoolean(_dtparroquia[0].Estado) == true)
            {
                chkactivo.Checked = true;
            }
            else
            {
                chkactivo.Checked = false;
            }
            


        }

        #region ** Llenado de combos

        public void ObtenerDiocesis()
        {
            _dtdiocesis = _bll.ObtenerDiocesis();
            ddlDiocesis.DataSource = _dtdiocesis;
            ddlDiocesis.DataValueField = "Identificacion";
            ddlDiocesis.DataTextField = "Descripcion";
            ddlDiocesis.DataBind();
            ddlDiocesis.Items.Insert(0, new ListItem("Seleccionar Diócesis", "0"));
        }
        public void ObtenerProvincia()
        {
            //SIPBLL.SIPBLL bll = new SIPBLL.SIPBLL();

            _dtprovincia = _bll.ObtenerProvincia();
            ddlProvincia.DataSource = _dtprovincia;
            ddlProvincia.DataValueField = "Identificacion";
            ddlProvincia.DataTextField = "Descripcion";
            ddlProvincia .DataBind();
            ddlProvincia.Items.Insert(0, new ListItem("Seleccionar Provincia", "0")); 
        }

        public void ObtenerCanton()
        {
            _dtocanton.Provincia = Convert.ToInt16(ddlProvincia.SelectedValue);
            _dtcanton = _bll.ObtenerCantonxProvincia(_dtocanton);
            ddlCanton.Enabled = true;
            ddlCanton.DataSource = _dtcanton;
            ddlCanton.DataValueField = "Identificacion";
            ddlCanton.DataTextField = "Descripcion";
            ddlCanton.DataBind();
            ddlCanton.Items.Insert(0, new ListItem("Seleccionar Cantón", "0")); 
        }

        #endregion

        #region ** Consecutivo Parroquia

        public int  ObtenerParametro() 
        {

            _dtparametro = _bll.ObtenerParametro(_valparametro);
            if (Convert.ToInt32(_dtparametro[0].Valor) == 0) //valida si el parametro es 0 y lo inicializa a 1
            { _dtoparroquia.IdParroquia = Convert.ToInt32(_dtparametro[0].Valor)+1; }
            else
            {
                _dtoparroquia.IdParroquia = Convert.ToInt32(_dtparametro[0].Valor);
            }
            return _dtoparroquia.IdParroquia;

        }

        public void ActualizaParametro()
        {
            //Actualizar la tabla Parametro
            _dtoparametro.IdParametro = _dtparametro[0].IdParametro;
            _dtoparametro.Descripcion = _dtparametro[0].Descripcion;
            _dtoparametro.Valor = _dtparametro[0].Valor + 1;
            _resp = _bll.RegistrarParametro(_dtoparametro,2);
        }

        #endregion

        #region ** Validaciones

        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())   //Esta linea detécta un Control que contenga otros Controles                    
                    //Así ningún control se quedará sin ser limpiado.                   
                    CleanControl(control.Controls);
            }
        }

       public static bool ValidarEmail(string email)
        {
            string expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                { return true; }
                else
                { return false; }
            }
            else
            { return false; }
        }

        #endregion

        
    }
}